<?php
/**
 * Created by PhpStorm.
 * User: wumengmeng <wu_mengmeng@foxmail.com>
 * Date: 2019/4/26 0026
 * Time: 14:35
 */

namespace HiCommon\Service;

use HiCommon\MongodbModel\MongoLoginShopUserLog;
use HiCommon\Repository\EntrustRoleUserRepository;
use HiCommon\Repository\ShopRepository;
use HiCommon\Repository\ShopUserRepository;
use Illuminate\Support\Facades\Hash;

class ShopUserService extends BaseService
{
    /**
     * 查询商户管理用户信息
     *
     * @param $n_uid
     *
     * @return array
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_find_one($n_uid){
        $arr_option['with'] = ['user_role'];
        $res = ShopUserRepository::base_find_one($n_uid,$arr_option);
        if(is_null($res)){
            return hello_error('数据不存在');
        }
        $arr_data = $res->toarray();
        return  hello_success('成功',$arr_data);
    }

    /**
     * 查询商户管理用户以及店铺信息
     *
     * @param $n_uid
     *
     * @return array
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_find_one_user_shop($n_uid){
        $res = ShopUserRepository::find_one_login($n_uid);
        if(is_null($res)){
            return hello_error('数据不存在');
        }
        $arr_data = $res->toarray();
        $arr_data['login_data'] = MongoLoginShopUserLog::where('username',$arr_data['username'])->orderBy('login_at','desc')->take(2)->get()->toarray();
        $arr_data['safety_data'] = judge_password_safety($arr_data['pass']);
        return  hello_success('成功',$arr_data);
    }

    /**
     * 修改登录密码
     *
     * @param $arr_input
     *
     * @return array|mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_edit_password($arr_input){
        $arr_input['id'] = intval($arr_input['id']);
        $arr_input['pass'] = str_trim($arr_input['pass']);
        if($arr_input['id'] <= 0){
            return hello_error('数据id不能为空');
        }
        $res = preg_password($arr_input['pass']);
        if($res['state'] != 0){
            return $res;
        }
        $arr_input['password'] = Hash::make($arr_input['pass']);
        $res = ShopUserRepository::base_edit_one($arr_input);
        if ($res === false){
            return hello_error('修改失败');
        }
        return hello_success('修改成功');
    }

    /**
     * 修改支付密码
     *
     * @param $arr_input
     *
     * @return array|mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_set_pay_password($arr_input){
        $arr_input['id'] = intval($arr_input['id']);
        $arr_input['pay_password'] = str_trim($arr_input['pay_password']);
        if($arr_input['id'] <= 0){
            return hello_error('数据id不能为空');
        }
        $res = preg_password($arr_input['pay_password']);
        if($res['state'] != 0){
            return $res;
        }
        $res = ShopRepository::base_edit_one($arr_input);
        if ($res === false){
            return hello_error('修改失败');
        }
        return hello_success('修改成功');
    }

    /**
     * 修改登录手机号
     *
     * @param $arr_input
     *
     * @return array|mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_edit_phone($arr_input){
        //接收并检查数据
        $arr_input['id'] = intval($arr_input['id']);
        $arr_input['phone'] = str_trim($arr_input['phone']);
        $arr_input['code'] = str_trim($arr_input['code']);
        $arr_input['new_phone'] = str_trim($arr_input['new_phone']);
        $arr_input['new_code'] = str_trim($arr_input['new_code']);
        if($arr_input['id'] <= 0){
            return hello_error('数据id不能为空');
        }
        if(strlen($arr_input['phone']) != 11){
            return hello_error('请输入11位原手机号');
        }
        if(strlen($arr_input['code']) != 6){
            return hello_error('请输入6位原手机验证码');
        }
        if(strlen($arr_input['new_phone']) != 11){
            return hello_error('请输入11位新手机号');
        }
        if(strlen($arr_input['new_code']) != 6){
            return hello_error('请输入6位新手机验证码');
        }

        //判断原手机和新手机号正则
        $res = preg_phone($arr_input['phone']);
        if($res['state'] != 0){
            return hello_error('原手机号格式错误');
        }
        $res = preg_phone($arr_input['new_phone']);
        if($res['new_phone'] != 0){
            return hello_error('新手机号格式错误');
        }

        //验证原手机验证码是否正确
        $s_real_code = redis_phone_code( $arr_input['phone'] );
        if (empty($s_real_code)){
            return hello_error('原手机验证码已过期');
        }
        if ($s_real_code != $arr_input['code']){
            return hello_error('原手机验证码错误');
        }

        //验证新手机验证码是否正确
        $s_real_code = redis_phone_code( $arr_input['new_phone'] );
        if (empty($s_real_code)){
            return hello_error('新手机验证码已过期');
        }
        if ($s_real_code != $arr_input['new_code']){
            return hello_error('新手机验证码错误');
        }

        //修改手机号
        $arr_data = ['id'=>$arr_input['id'],'phone'=>$arr_input['new_phone']];
        $res = ShopUserRepository::base_edit_one($arr_data);
        if ($res === false){
            return hello_error('修改失败');
        }
        unset_redis_phone_code($arr_input['phone']);
        unset_redis_phone_code($arr_input['new_phone']);

        return hello_success('修改成功');
    }

    /**
     * 修改个人资料
     *
     * @param $arr_input
     *
     * @return array|mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_edit_userinfo($arr_input){
        filter_input_data($arr_input);
        if(empty($arr_input['sex'])){
            $arr_input['sex'] = 0;
        }
        $arr_input['id'] = intval($arr_input['id']);
        if($arr_input['id'] <= 0){
            return hello_error('数据id不能为空');
        }
    
        $res = ShopUserRepository::base_edit_one($arr_input);
        if ($res === false){
            return hello_error('修改失败');
        }
        return hello_success('修改成功');
    }

    /**
     * 根据搜索条件获取管理用户分页数据
     *
     * @param array $arr_search
     * @return array
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_search_list(array $arr_search)
    {
        $arr_option['with'] = ['user_role'];
        $data = ShopUserRepository::get_search_list($arr_search,$arr_option);
        $data->appends($arr_search);//添加链接参数
        $data = list_page_data($data,$arr_search);
        $data['search_type'] = [
          'username'=>'用户名',
          'phone'=>'手机号',
          'nickname'=>'昵称',
          'realname'=>'真实姓名',
        ];
        return  hello_success('成功',$data);
    }

    /**
     * 添加一条商户后台用户数据
     *
     * @param $arr_input
     *
     * @return array|\Illuminate\Http\RedirectResponse
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_add_one($arr_input)
    {
        filter_input_data($arr_input);
        $n_role_id = (int)$arr_input['role_id'];
        array_pull($arr_input,'role_id');
        $arr_input['password'] = Hash::make($arr_input['pass']);
        $arr_input['is_master'] = 2;
        $arr_input['rong_cloud_id'] = 'shop_'.uniqid();

        if($n_role_id <= 0) {
            return hello_error('请选择用户角色');
        }

        //添加商户后台用户信息
        $res = ShopUserRepository::base_add_one($arr_input)->toarray();
        $n_admin_id = $res['id'];
        if(empty($res)){
            return hello_error('添加失败');
        }

        //添加用户角色信息
        $arr_data = ['user_id'=>$n_admin_id,'role_id'=>$n_role_id];
        $res = EntrustRoleUserRepository::add_one_shop_role_user($arr_data)->toarray();
        if(empty($res)){
            return hello_error('添加失败2');
        }

        return  hello_success('添加成功',$res);
    }

    /**
     * 修改商户后台用户
     *
     * @param array $arr_input
     *
     * @return array|\Illuminate\Http\RedirectResponse
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_edit_one(array $arr_input)
    {
        filter_input_data($arr_input);
        $arr_input['id'] = intval($arr_input['id']);
        $n_role_id = intval($arr_input['role_id']);
        array_pull($arr_input,'role_id');
        if ($arr_input['id'] <= 0) {
            return hello_error('数据id不能为空');
        }
        if(!empty($arr_input['pass'])){
            $arr_input['password'] = Hash::make($arr_input['pass']);
        }

        if($n_role_id <= 0) {
            return hello_error('请选择用户角色');
        }

        //修改商户后台用户信息
        $res = ShopUserRepository::base_edit_one($arr_input);
        if ($res === false) {
            return hello_error('修改失败1');
        }

        //修改用户角色信息
        $arr_where = ['user_id'=>$arr_input['id'],'model'=>'shop'];
        $arr_data = ['role_id'=>$n_role_id];
        $res = EntrustRoleUserRepository::edit_or_create($arr_where,$arr_data);
        if($res === false){
            return hello_error('修改失败2');
        }
        return hello_success('修改成功');
    }

    /**
     * 修改商户后台用户单个字段
     *
     * @param $arr_input
     *
     * @return array
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_change_one_state($arr_input){
        $arr_input['id'] = intval($arr_input['id']);
        if ($arr_input['id'] <= 0) {
            return hello_error('数据id不能为空');
        }

        $res = ShopUserRepository::base_edit_one($arr_input);
        if ($res === false) {
            return hello_error('修改失败');
        }
        return hello_success('修改成功');
    }

    /**
     * 删除一个商户后台用户
     *
     * @param int $n_id
     *
     * @return array|\Illuminate\Http\RedirectResponse
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function api_delete_one($n_id)
    {
        if ($n_id <= 0) {
            return hello_error('数据id不能为空');
        }
        $res = ShopUserRepository::base_delete_one($n_id);
        if($res === false){
            return hello_error('删除失败');
        }
        return  hello_success('删除成功');
    }

}